Random Walk Rorschach




''' Random Walk Rorschach- Tom Fangrow, 5/11/26. '''

from tkinter import *
import random, time
 
root = Tk()
root.geometry('1600x1290')
root.title('Random Walk Rorschach')

canvas = Canvas(root, width=1600, height=1200, bg='#AAAAAA', highlightthickness=0)
canvas.grid(row=0, column=0, columnspan=4)

v = StringVar(root, 'square')           # pixel shape default is square

def  rorschach():
    canvas.delete('all')                # start with clean canvas
    
    size = size_slider.get()            # pixel dimensions: size x size
    x = 800                             # coordinates of canvas center
    y = 600
    
    for i in range(n_slider.get()):
        
        x += size*random.randint(-1, 1) # returns -size, zero, or +size
        y += size*random.randint(-1, 1)
        
        if(v.get() == 'circle'):        # vget() is radio button selection
            canvas.create_oval(x, y, x+size, y+size, fill='#000000')
            canvas.create_oval(1600-x, y, 1600-x+size, y+size, fill='#000000')
        if(v.get() == 'square'):
            canvas.create_rectangle(x, y, x+size, y+size, fill='#000000')
            canvas.create_rectangle(1600-x, y, 1600-x+size, y+size, fill='#000000')
            
        time.sleep(.005)                # time delay in seconds
        canvas.update()
   
start_button = Button(root, text=' Start New Inkblot ', command=rorschach)
start_button.grid(row=2, column=3, pady=10)

size_slider = Scale(root, from_=2, to=50, orient=HORIZONTAL)
size_slider.grid(row=2, column=0)
size_slider.set(15)
size_label = Label(root, text='pixel size')
size_label.grid(row=3, column=0)

n_slider = Scale(root, from_=20, to=2000, length=500, orient=HORIZONTAL)
n_slider.grid(row=2, column=1)
n_slider.set(300)
n_label = Label(root, text='number of pixels')
n_label.grid(row=3, column=1)

square = Radiobutton(root, text='square pixels', variable=v, value='square')
square.grid(row=2, column=2)

circle = Radiobutton(root, text='round pixels', variable=v, value='circle')
circle.grid(row=3, column=2)

root.mainloop()

Back to Tom Fangrow's Home Page